home *** CD-ROM | disk | FTP | other *** search
/ Game Cracker (Expanded Edition) / Game Cracker (Expanded Edition).iso / cracks / SV_MANX.ZIP / ManxTT Superbikes.txt < prev    next >
Encoding:
Text File  |  1998-06-01  |  10.4 KB  |  216 lines

  1.  
  2. Free Information Xchange '97 presents:
  3.  
  4. ManxTT Superbikes - CD Crack by Static Vengeance
  5.  
  6. Requirements:
  7. Hex Editor and Full game install
  8.  
  9.     How I cracked Manx TT Superbikes by SEGA Entertainment with W32Dasm by URSoft.  First off
  10. I'm following the 3Dfx version called Glmanxtt.exe.  The same ideas (and exact same patch) will
  11. work for the "native" version.  If you want to follow along, start by running w32dasm and disassemble
  12. glmanxtt.exe.  When W32Dasm has finished with the disassembly we start off by selecting "Refs" from
  13. the menu bar and choose 'String data references' ... Grab the slider bar and scroll down looking for
  14. "Manx TT CD Must be in to run" (you ran the program once without the CD in to check how it asks
  15. for the CD, right?).  Anyways double click on that string and you're in the middle of the check.  You
  16. should see something like the following (the entire routine):
  17.  
  18. * Referenced by a CALL at Address:
  19. |:00445AC8   
  20. |
  21. :004489E0 55                      push ebp
  22. :004489E1 89E5                    mov ebp, esp
  23. :004489E3 53                      push ebx
  24. :004489E4 51                      push ecx
  25. :004489E5 52                      push edx
  26. :004489E6 56                      push esi
  27. :004489E7 57                      push edi
  28. :004489E8 81EC10010000            sub esp, 00000110
  29. :004489EE 890424                  mov dword ptr [esp], eax
  30. :004489F1 BAFFFFFFFF              mov edx, FFFFFFFF
  31. :004489F6 6804010000              push 00000104
  32. :004489FB 8B35E8EB4800            mov esi, dword ptr [0048EBE8]
  33. :00448A01 31DB                    xor ebx, ebx
  34. :00448A03 68FCE05400              push 0054E0FC
  35. :00448A08 8915F4DF5400            mov dword ptr [0054DFF4], edx
  36. :00448A0E BA01000000              mov edx, 00000001
  37. :00448A13 56                      push esi
  38. :00448A14 891DF0DF5400            mov dword ptr [0054DFF0], ebx
  39. :00448A1A 66891504E25400          mov word ptr [0054E204], dx
  40.  
  41. * Reference To: KERNEL32.GetModuleFileNameA, Ord:0008h
  42.                                   |
  43. :00448A21 2EFF156C02AE00          Call dword ptr cs:[00AE026C]
  44. :00448A28 BA5C000000              mov edx, 0000005C
  45. :00448A2D B8FCE05400              mov eax, 0054E0FC
  46. :00448A32 E8AF140100              call 00459EE6
  47. :00448A37 40                      inc eax
  48. :00448A38 C60000                  mov byte ptr [eax], 00
  49. :00448A3B BE04000000              mov esi, 00000004
  50.  
  51. * Referenced by a (U)nconditional or (C)onditional Jump at Address:
  52. |:00448B30(C)
  53. |
  54.  
  55. * Possible StringData Ref from Data Obj ->"A:\"            <-- Many CD checks can be found by searching
  56.                                   |                        <-- for "a:\" or "c:\" from refs in W32Dasm
  57. :00448A40 BA744C4800              mov edx, 00484C74
  58. :00448A45 8D45E0                  lea eax, dword ptr [ebp-20]
  59. :00448A48 E823E6FFFF              call 00447070
  60. :00448A4D 807DE05A                cmp byte ptr [ebp-20], 5A
  61. :00448A51 0F8F9D000000            jg 00448AF4
  62.  
  63. * Referenced by a (U)nconditional or (C)onditional Jump at Address:
  64. |:00448AEE(C)
  65. |
  66. :00448A57 8D45E0                  lea eax, dword ptr [ebp-20]
  67. :00448A5A 50                      push eax
  68.  
  69. * Reference To: KERNEL32.GetDriveTypeA, Ord:0006h                <-- This call often used in CD checks
  70.                                   |                              <-- Use text string search in W32Dasm
  71. :00448A5B 2EFF156402AE00          Call dword ptr cs:[00AE0264]
  72. :00448A62 83F805                  cmp eax, 00000005              <-- 05 is the value for a CD-ROM drive
  73. :00448A65 0F8578000000            jne 00448AE3
  74. :00448A6B 8D55E0                  lea edx, dword ptr [ebp-20]
  75. :00448A6E 8D85DCFEFFFF            lea eax, dword ptr [ebp+FFFFFEDC]
  76. :00448A74 E8F7E5FFFF              call 00447070
  77. :00448A79 6804010000              push 00000104
  78. :00448A7E 8DBDDCFEFFFF            lea edi, dword ptr [ebp+FFFFFEDC]
  79. :00448A84 29C9                    sub ecx, ecx
  80. :00448A86 49                      dec ecx
  81. :00448A87 31C0                    xor eax, eax
  82. :00448A89 F2                      repnz
  83. :00448A8A AE                      scasb
  84. :00448A8B F7D1                    not ecx
  85. :00448A8D 49                      dec ecx
  86. :00448A8E 8D85DCFEFFFF            lea eax, dword ptr [ebp+FFFFFEDC]
  87. :00448A94 01C8                    add eax, ecx
  88. :00448A96 50                      push eax
  89.  
  90. * Possible Reference to String Resource ID=04004: "gamesnds.rbh"  <-- Check for this file
  91.                                   |
  92. :00448A97 68A40F0000              push 00000FA4
  93. :00448A9C 8B3DE8EB4800            mov edi, dword ptr [0048EBE8]
  94. :00448AA2 57                      push edi
  95.  
  96. * Reference To: USER32.LoadStringA, Ord:0015h
  97.                                   |
  98. :00448AA3 2EFF158803AE00          Call dword ptr cs:[00AE0388]
  99. :00448AAA 85C0                    test eax, eax
  100. :00448AAC 7426                    je 00448AD4
  101. :00448AAE 8D85DCFEFFFF            lea eax, dword ptr [ebp+FFFFFEDC]
  102. :00448AB4 89F2                    mov edx, esi
  103. :00448AB6 E80C520000              call 0044DCC7
  104. :00448ABB 83F8FF                  cmp eax, FFFFFFFF
  105. :00448ABE 7423                    je 00448AE3
  106. :00448AC0 8D55E0                  lea edx, dword ptr [ebp-20]
  107. :00448AC3 B8F8DF5400              mov eax, 0054DFF8
  108. :00448AC8 BB01000000              mov ebx, 00000001
  109. :00448ACD E89EE5FFFF              call 00447070
  110. :00448AD2 EB20                    jmp 00448AF4
  111.  
  112. * Referenced by a (U)nconditional or (C)onditional Jump at Address:
  113. |:00448AAC(C)
  114. |
  115. :00448AD4 8D55E0                  lea edx, dword ptr [ebp-20]
  116. :00448AD7 B8F8DF5400              mov eax, 0054DFF8
  117. :00448ADC E88FE5FFFF              call 00447070
  118. :00448AE1 EB11                    jmp 00448AF4
  119.  
  120. * Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
  121. |:00448A65(C), :00448ABE(C)
  122. |
  123. :00448AE3 8A55E0                  mov dl, byte ptr [ebp-20]
  124. :00448AE6 FEC2                    inc dl
  125. :00448AE8 8855E0                  mov byte ptr [ebp-20], dl
  126. :00448AEB 80FA5A                  cmp dl, 5A
  127. :00448AEE 0F8E63FFFFFF            jle 00448A57
  128.  
  129. * Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
  130. |:00448A51(C), :00448AD2(U), :00448AE1(U)
  131. |
  132.  
  133. * Possible StringData Ref from Data Obj ->"cd_nocheck"   <-- what the hell is this? a pointer
  134.                                   |                      <-- to how to remove the CD check?
  135. :00448AF4 BA784C4800              mov edx, 00484C78
  136. :00448AF9 A104EC4800              mov eax, dword ptr [0048EC04]
  137. :00448AFE E82DE7FFFF              call 00447230          <-- Check for the original CD
  138. :00448B03 85C0                    test eax, eax
  139. :00448B05 7522                    jne 00448B29           <-- Take this jump for a "passed" CD check
  140. :00448B07 85DB                    test ebx, ebx
  141. :00448B09 7523                    jne 00448B2E
  142.  
  143. * Possible StringData Ref from Data Obj ->"Manx TT CD Must be in to run."  <-- ask for the CD
  144.                                   |
  145. :00448B0B 68844C4800              push 00484C84
  146. :00448B10 A1ECEB4800              mov eax, dword ptr [0048EBEC]
  147. :00448B15 50                      push eax
  148. :00448B16 E8B5D5FFFF              call 004460D0
  149. :00448B1B 83C408                  add esp, 00000008
  150. :00448B1E 85C0                    test eax, eax
  151. :00448B20 750C                    jne 00448B2E
  152. :00448B22 E889CEFFFF              call 004459B0
  153. :00448B27 EB05                    jmp 00448B2E
  154.  
  155. * Referenced by a (U)nconditional or (C)onditional Jump at Address:
  156. |:00448B05(C)
  157. |
  158. :00448B29 BB01000000              mov ebx, 00000001     <-- Critical for the test ebx,ebx
  159.  
  160. * Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
  161. |:00448B09(C), :00448B20(C), :00448B27(U)
  162. |
  163. :00448B2E 85DB                    test ebx, ebx         <-- Test ebx
  164. :00448B30 0F840AFFFFFF            je 00448A40           <-- Take this jump and it's do the check again
  165. :00448B36 8D65EC                  lea esp, dword ptr [ebp-14]
  166. :00448B39 5F                      pop edi
  167. :00448B3A 5E                      pop esi
  168. :00448B3B 5A                      pop edx
  169. :00448B3C 59                      pop ecx
  170. :00448B3D 5B                      pop ebx
  171. :00448B3E 5D                      pop ebp
  172. :00448B3F C3                      ret
  173.  
  174.     So you can see the inportant section is the mov ebx, 00000001 and the test ebx,ebx.
  175. Finally it's the je (jump equal) that says "yea or nay" for the CD check.  Just remember we
  176. do want to get past the point where we load in gamesnds.rbh, so we need to deal with this
  177. section of code
  178.  
  179. :00448AF4 BA784C4800              mov edx, 00484C78
  180. :00448AF9 A104EC4800              mov eax, dword ptr [0048EC04]
  181. :00448AFE E82DE7FFFF              call 00447230           <-- Check for the original CD
  182. :00448B03 85C0                    test eax, eax
  183. :00448B05 7522                    jne 00448B29            <-- This is where we'll place our edit
  184. :00448B07 85DB                    test ebx, ebx
  185. :00448B09 7523                    jne 00448B2E
  186.  
  187.     The jne 00448B29 is the jump for a passed CD check.  So I thought I would make my edit there,
  188. as there are 3 other conditional jumps to 448AF4 (the above snipet of code).  Also the continue code
  189. is actually after the condition jump (je 00448A40) at 448B30.  So as long as we need to get to 448B36
  190. anyways I changed the jne 00448B29 to jmp 00448B36.  Also, as long as the CD isn't going to be in the
  191. drive anyways, why check for it?  I killed the call to the CD check by NOP'ing out the call, simple
  192. enough.  The actual edits are the same for both files (glmanxtt.exe and manxtt.exe) just at different
  193. offsets.  The patches to made are as follows:
  194.  
  195. Edit manxtt.exe USA ver at offset 282,350
  196. upgrade from Sega Japan use offset 283,854
  197. ==========================================
  198. Search for:E8 2D E7 FF FF 85 C0 75 22
  199. Change to :90 90 90 90 90 -- -- EB 2F
  200.  
  201. Edit glmanxtt.exe USA ver at offset 233,214
  202. upgrade from Sega Japan use offset 283,982
  203. ==========================================
  204. Search for:E8 2D E7 FF FF 85 C0 75 22
  205. Change to :90 90 90 90 90 -- -- EB 2F
  206.  
  207.     The 3Dfx version is a much better version to play... and now you can play it without pulling
  208. out your original CD... which also makes the program nicer to play.  Once again I showed you how I
  209. cracked a simple CD check using a very powerful program (in the right hands) called W32Dasm.  Keep in
  210. mind there are always several ways to crack programs and this is just one example of the way I do it...
  211. That doesn't make it "THE" right way or wrong way... just my way  And it's the way I tought myself.
  212.  
  213. ManxTT needed to be FiX'ed
  214.  
  215. Static Vengeance
  216.